package com.yangfan.design_pattern.mode_method;

/**
 * @description: 模板方法设计模式 来自王文君线程 一阶段 04讲 18分钟
 * @author: yangfan
 * @date: Created in 2020/1/21 0021 16:19
 * @modified By:
 */
public abstract class ModeMethod {

    public static void main(String[] args) {

        ModeMethod m = new ModeMethod() {
            @Override
            protected void custom(String message) {
                System.out.println("自定义内容打印");
            }
        };
        m.modeMethod("你好这是我的实现");
    }

    /**
     *
     * 假设这个打印方法 前边的 流程与后面的 流程 能够确定， 但是中间位置的 流程暂时还无法确定(特殊业务逻辑无法确定)
     * 此时可以定义一个抽象方法，调用并不进行任何的实现。 因为这个实现是需要调用者去实现，因为调用者知道自己需要什么样的实现
     * @param message
     */
    public final void modeMethod(String message){//如果这个模板方法已经定好了的话，需要给他定义成 final 不进行定义的话 子类是能够重写这个 方法的。
        System.out.println("====================假设这个是一些固定的逻辑一大堆业务====================");
        custom(message); //特殊逻辑需要使用者自己去实现此业务逻辑
        System.out.println("====================假设这个是一些固定的逻辑一大堆业务====================");
    }

    /**
     * 这个方法之所以是抽象的 是因为 这个方法 需要使用者自己去进行实现需要的特殊需求 特殊逻辑
     * @param message
     */
    protected abstract void custom(String message);

}
